package com.atguigu.gulimall.order;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;


/**
 *  RabbitMQ整合
 *      1、引入启动依赖
 *      2、配置文件自动生效
 *      3、容器中会自动注入
 *          RabbitTemplate、AmqpAdmin、CachingConnectionFactory连接工厂、RabbitMessagingTemplate
 *      4、配置MQ主机地址、端口、虚拟主机，其他基本信息自动配置中都有默认配置
 *          默认配置文件RabbitProperties，其配置前缀是spring.rabbitmq
 *      5、开启注解
 *          @EnableRabbit
 *          如果不使用@RabbitListener注解，可以不使用
 *      6、常用注解
 *          1、@RabbitListener
 *              可标注在类或方法上，标注在方法上则表示该方法监听绑定的队列的消息
 *              标注在类上时，需要配合@RabbitHandler注解，说明该类标注了@RabbitHandler注解的方法用于监听绑定的队列的消息
 *          2、 @RabbitHandler
 *      7、使用AspectJ创建动态代理对象，这样可以解决本类事务互调失效问题
 *          步骤：
 *              1、引入spring-boot-starter-aop，它引入了AspectJ的依赖
 *              2、开启@EnableAspectJAutoProxy(exposeProxy = true)注解，exposeProxy = true代表允许对外暴露代理对象
 *
 */
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableFeignClients
@EnableRedisHttpSession
@EnableDiscoveryClient
@EnableRabbit
@SpringBootApplication
public class GulimallOrderApplication {

	public static void main(String[] args) {
		SpringApplication.run(GulimallOrderApplication.class, args);
	}

}
